package com.dayuanit.pay.bank.domain;

/**
 * 新浪支付请求参数
 * @author Administrator
 *
 */
public class SinaPayRequest {
	
	/**
	 * 固定选择值：1、2、3
 		1代表UTF-8; 2代表GBK; 3代表GB2312
		默认值为1
	 */
	private static final String inputCharset = "1";
	
	/**
	 * 需要是绝对地址，新浪支付将支付结果发送到bgUrl对应的地址，并且获取商户按照约定格式输出的地址，显示页面给用户
	 * 异步通知地址
	 */
	private String bgUrl;
	
	/**
	 * 固定值：v2.3
		注意为小写字母
	 */
	private static final String version = "v2.3";
	
	/**
	 * 固定值：1
		1代表中文显示
	 */
	private static final String language = "1";
	
	/**
	 * 1代表MD5加密签名方式
		4代表对称对称加密方式
	 */
	private String signType;
	
	/**
	 * 数字串
		本参数用来指定接收款项的人民币账号
		使用对公基本户
	 */
	private String merchantAcctId;
	
	/**
	 * 字符串
		只允许使用字母、数字、- 、_,并以字母或数字开头
		每商户提交的订单号，必须在自身账户交易中唯一
	 */
	private String orderId;
	
	/**
	 * 商户订单金额 
	 * 整型数字
		以分为单位。比方10元，提交时金额应为1000
	 */
	private String orderAmount;
	
	/**
	 * 商户订单提交时间
	 * 数字串，一共14位
		格式为：年[4位]月[2位]日[2位]时[2位]分[2位]秒[2位]
		例如：20071117020101
	 */
	private String orderTime;
	
	/**
	 * 支付方式 固定选择值：10 
			10：银行卡网银支付
	 */
	private static final String payType = "10";
	
	/**
	 * 合作伙伴在新浪支付的用户编号
	 * 数字串。商户的memberId。
	 */
	private String pid;
	
	/**
	 * 签名字符串
	 * 以上所有非空参数及其值与密钥组合，经加密后生成。MD5转化为小写的32位字符串；DSA和RSA加密后是直接证书加密后的密文
	 * Origin＝
			inputCharset={inputCharset}&bgUrl={bgUrl}
			&cancelUrl={cancelUrl}&version={version}
			&language={language}&signType={signType}
			&merchantAcctId={merchantAcctId}&payerName={payerName}
			&payerContactType={payerContactType}&payerContact={payerContact}
			&payerIdType={payerIdType}&payerId={payerId}&orderId={orderId}
			&orderAmount={orderAmount}&orderTime={orderTime}&ext1={ext1}&ext2={ext2}
			&payType={payType}&bankId={bankId}&redoFlag={redoFlag}&expiredTime={expiredTime}
			&pid={pid}&ip={ip}&deviceId={deviceId}
	 */
	private String signMsg;
	
	private SinaPayRequest() {
		
	}
	
	public static SinaPayRequest instance() {
		return new SinaPayRequest();
	}
	
	/**
	 * 生成待签名明文字符串 按照文档格式
	 * 
	 * @return
	 */
	public String createSignOrigin(String key) {
		
		StringBuffer origin = new StringBuffer();
		origin.append("inputCharset=").append(inputCharset).append("&")
				.append("bgUrl=").append(bgUrl).append("&")
				.append("version=").append(version).append("&")
				.append("language=").append(language).append("&")
				.append("signType=").append(signType).append("&")
				.append("merchantAcctId=").append(merchantAcctId).append("&")
				.append("orderId=").append(orderId).append("&")
				.append("orderAmount=").append(orderAmount).append("&")
				.append("orderTime=").append(orderTime).append("&")
				.append("payType=").append(payType).append("&")
				.append("pid=").append(pid).append("&")
				.append("key=").append(key);
		
		return origin.toString();
		
	}

	public String getInputCharset() {
		return inputCharset;
	}

	public String getBgUrl() {
		return bgUrl;
	}

	public SinaPayRequest setBgUrl(String bgUrl) {
		this.bgUrl = bgUrl;
		return this;
	}

	public String getVersion() {
		return version;
	}

	public String getLanguage() {
		return language;
	}

	public String getSignType() {
		return signType;
	}

	public SinaPayRequest setSignType(String signType) {
		this.signType = signType;
		return this;
	}

	public String getMerchantAcctId() {
		return merchantAcctId;
	}

	public SinaPayRequest setMerchantAcctId(String merchantAcctId) {
		this.merchantAcctId = merchantAcctId;
		return this;
	}

	public String getOrderId() {
		return orderId;
	}

	public SinaPayRequest setOrderId(String orderId) {
		this.orderId = orderId;
		return this;
	}

	public String getOrderAmount() {
		return orderAmount;
	}

	public SinaPayRequest setOrderAmount(String orderAmount) {
		this.orderAmount = orderAmount;
		return this;
	}

	public String getOrderTime() {
		return orderTime;
	}

	public SinaPayRequest setOrderTime(String orderTime) {
		this.orderTime = orderTime;
		return this;
	}

	public String getPid() {
		return pid;
	}

	public SinaPayRequest setPid(String pid) {
		this.pid = pid;
		return this;
	}

	public String getSignMsg() {
		return signMsg;
	}

	public void setSignMsg(String signMsg) {
		this.signMsg = signMsg;
	}
	
	public static String getPayType() {
		return payType;
	}
	
}
